fix(string_obfuscate): scope ASCII heuristic to Error(string) blocks - #149
Merged
Conversation
The heuristic fallback scrambled any PUSH16+ with >=60% printable bytes, including arbitrary constants emitted by other passes. ArithmeticChain's inline chain values could be misclassified and corrupted, reducing to a wrong constant (observed as collect() reverting with WrongEventSignature() on the ERC20 Transfer topic). Require the block to contain an Error(string) selector before running the fallback.
…tial Reproduces the mainnet collect() WrongEventSignature() failure under seed b1314f5c... across the default pipeline, plus an ArithmeticChain-only isolation case and an ignored subset-bisect that localises it to AC+SO. The differential test compiles AC chains and runs them on REVM to confirm the chain math (including MUL/DIV) matches EVM semantics.
Contributor
Decompile Diff AnalysisStatistics (50 iterations)
Full Diff Output─── Storage ───
@@ -1,16 +1,20 @@
- uint256 public constant tokenContract = 0;
- uint256 public constant expectedAmount = 0;
- uint256 public constant unresolved_3d2691bc = 256;
- uint256 public constant unresolved_8677ab23 = 0;
+ bytes32 store_c;
+ bytes32 store_f;
+ uint256 store_o;
+ bytes32 store_m;
+ bytes32 store_p;
+ bytes32 store_j;
+ address store_k;
+ bytes32 store_a;
+ bytes32 store_e;
+ uint256 public unresolved_74cfecc6;
+ bytes32 store_h;
+ uint256 public unresolved_8f4be216;
+ bytes32 store_g;
+ uint256 public unresolved_be90c676;
+ bytes32 store_l;
+ bytes32 store_q;
+ bool public unresolved_4fbdbe0f;
- uint256 public unresolved_8bd03d0a;
- uint256 public executionDeadline;
- uint256 public bondAmount;
- bool public unresolved_308657d7;
- uint256 public totalBondsDeposited;
- uint256 public unresolved_d415b3f9;
- uint256 public currentRewardAmount;
- address public unresolved_1aa7c0ec;
-
- error InvalidRLPList();
+ error CustomError_00000000();
─── Function fund (0xa65e2cfd → 0x07ac2658) ───
@@ -1,41 +1,43 @@
- /// @custom:selector 0xa65e2cfd
- /// @custom:signature fund(uint256 arg0, uint256 arg1) public payable
+ /// @custom:selector 0x07ac2658
+ /// @custom:signature Unresolved_07ac2658(uint256 arg0, uint256 arg1) public payable
/// @param arg0 ["uint256", "bytes32", "int256"]
/// @param arg1 ["uint256", "bytes32", "int256"]
- function fund(uint256 arg0, uint256 arg1) public payable {
+ function Unresolved_07ac2658(uint256 arg0, uint256 arg1) public payable {
+ require(!store_l);
+ require(0 == 0x01);
require(msg.value);
- require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0x40, CustomError_618bbdd5());
- require(msg.sender - 0, CustomError_618bbdd5());
- var_a = 0x618bbdd500000000000000000000000000000000000000000000000000000000;
- require(bytes1(unresolved_308657d7 >> 0x08), CustomError_5adf6387());
- var_a = 0x5adf638700000000000000000000000000000000000000000000000000000000;
- require(!arg0);
- require(!arg1);
- currentRewardAmount = arg0;
- unresolved_d415b3f9 = arg0;
- unresolved_8bd03d0a = arg1;
- require(unresolved_d415b3f9 > (unresolved_d415b3f9 + unresolved_8bd03d0a));
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0x40, CustomError_4f6b2e1b());
+ require(msg.sender - 0, CustomError_4f6b2e1b());
+ var_a = 0x4f6b2e1b00000000000000000000000000000000000000000000000000000000;
+ require(bytes1(unresolved_4fbdbe0f >> 0x08), CustomError_7926749b());
+ var_a = 0x7926749b00000000000000000000000000000000000000000000000000000000;
+ require(!arg0, CustomError_88dca757());
+ require(!arg1, CustomError_88dca757());
+ store_m = arg0;
+ unresolved_be90c676 = arg0;
+ unresolved_8f4be216 = arg1;
+ require(unresolved_be90c676 > (unresolved_be90c676 + unresolved_8f4be216), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
var_c = 0x23b872dd00000000000000000000000000000000000000000000000000000000;
address var_d = msg.sender;
address var_e = address(this);
- uint256 var_f = unresolved_d415b3f9 + unresolved_8bd03d0a;
+ uint256 var_f = unresolved_be90c676 + unresolved_8f4be216;
(bool success, bytes memory ret0) = address(0).Unresolved_23b872dd(var_d); // call
require(!0, CustomError_045c4b02());
- unresolved_308657d7 = (uint248(unresolved_308657d7)) | 0x0100;
+ unresolved_4fbdbe0f = (uint248(unresolved_4fbdbe0f)) | 0x0100;
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
- require(0x20 > ret0.length);
- require(((var_g + 0x20) > 0xffffffffffffffff) | ((var_g + 0x20) < var_g));
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(0x20 > ret0.length, CustomError_b1b7848f());
+ require(((var_g + 0x20) > 0xffffffffffffffff) | ((var_g + 0x20) < var_g), CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x41;
uint256 var_g = var_g + 0x20;
require(((var_g + 0x20) - var_g) < 0x20);
require(var_g.length - var_g.length, CustomError_045c4b02());
require(!var_g.length, CustomError_045c4b02());
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
- unresolved_308657d7 = (uint248(unresolved_308657d7)) | 0x0100;
+ unresolved_4fbdbe0f = (uint248(unresolved_4fbdbe0f)) | 0x0100;
var_a = 0x932ca0a300000000000000000000000000000000000000000000000000000000;
var_a = 0xea1083a700000000000000000000000000000000000000000000000000000000;
}
─── Function requestCancellation (0x81972d00 → 0x5897654f) ───
@@ -1,10 +1,12 @@
- /// @custom:selector 0x81972d00
- /// @custom:signature requestCancellation() public payable
- function requestCancellation() public payable {
+ /// @custom:selector 0x5897654f
+ /// @custom:signature Unresolved_5897654f() public payable
+ function Unresolved_5897654f() public payable {
+ require(!store_p);
+ require(0 == 0x01);
require(msg.value);
require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
- require(msg.sender - 0, CustomError_618bbdd5());
- var_a = 0x618bbdd500000000000000000000000000000000000000000000000000000000;
- unresolved_308657d7 = 0x01 | (uint248(unresolved_308657d7));
+ require(msg.sender - 0, CustomError_4f6b2e1b());
+ var_a = 0x4f6b2e1b00000000000000000000000000000000000000000000000000000000;
+ unresolved_4fbdbe0f = 0x01 | (uint248(unresolved_4fbdbe0f));
}
─── Function Unresolved_ede7f6a3 (0xede7f6a3 → 0x3940f678) ───
@@ -1,77 +1,80 @@
- /// @custom:selector 0xede7f6a3
- /// @custom:signature Unresolved_ede7f6a3(uint256 arg0, uint256 arg1) public view
+
+ /// @custom:selector 0x3940f678
+ /// @custom:signature Unresolved_3940f678(uint256 arg0, uint256 arg1) public view
/// @param arg0 ["uint256", "bytes32", "int256"]
/// @param arg1 ["uint256", "bytes32", "int256"]
- function Unresolved_ede7f6a3(uint256 arg0, uint256 arg1) public view {
+ function Unresolved_3940f678(uint256 arg0, uint256 arg1) public view {
+ require(0xf6 == msg.data[0]);
+ require(0 == 0x01);
require(msg.value);
require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0x40);
require(arg0 > 0xffffffffffffffff);
require(((msg.data.length - arg0) + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc) < 0xa0);
require(arg0 + (arg0) > 0xffffffffffffffff);
- require(!(bytes1(unresolved_308657d7 >> 0x08)), CustomError_ded7c80c());
- require(msg.sender == (address(unresolved_1aa7c0ec)), CustomError_ded7c80c());
- require(!(msg.sender == (address(unresolved_1aa7c0ec))), CustomError_ded7c80c());
- var_a = 0xded7c80c00000000000000000000000000000000000000000000000000000000;
- require(arg1 > block.number, CustomError_58968cf0());
- var_a = 0x58968cf000000000000000000000000000000000000000000000000000000000;
- require((block.number - arg1) > block.number, CustomError_c42a0185());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(!(bytes1(unresolved_4fbdbe0f >> 0x08)), CustomError_212837f4());
+ require(msg.sender == (address(store_k)), CustomError_212837f4());
+ require(!(msg.sender == (address(store_k))), CustomError_212837f4());
+ var_a = 0x212837f400000000000000000000000000000000000000000000000000000000;
+ require(arg1 > block.number, CustomError_a7697310());
+ var_a = 0xa769731000000000000000000000000000000000000000000000000000000000;
+ require((block.number - arg1) > block.number, CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
require((block.number - arg1) > 0x0100, CustomError_c42a0185());
var_a = 0xc42a018500000000000000000000000000000000000000000000000000000000;
- require(!blockhash(arg1), CustomError_31aed5c2());
- require(arg0 + (arg0) > 0xffffffffffffffff, CustomError_31aed5c2());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(!blockhash(arg1), CustomError_b1b7848f());
+ require(arg0 + (arg0) > 0xffffffffffffffff, CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x41;
- require(((var_c + (uint248((0x20 + (0x1f + (arg0 + (arg0)))) + 0x1f))) > 0xffffffffffffffff) | ((var_c + (uint248((0x20 + (0x1f + (arg0 + (arg0)))) + 0x1f))) < var_c), CustomError_31aed5c2());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(((var_c + (uint248((0x20 + (0x1f + (arg0 + (arg0)))) + 0x1f))) > 0xffffffffffffffff) | ((var_c + (uint248((0x20 + (0x1f + (arg0 + (arg0)))) + 0x1f))) < var_c), CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x41;
uint256 var_c = var_c + (uint248((0x20 + (0x1f + (arg0 + (arg0)))) + 0x1f));
uint256 var_d = (arg0 + (arg0));
var_e = msg.data[36:36];
uint256 var_f = 0;
- require(keccak256(var_e) - blockhash(arg1), CustomError_31aed5c2());
- require(!(arg0 + (arg0)), CustomError_31aed5c2());
- require(bytes1(0x20 + (arg0 + (arg0))) < 0xc000000000000000000000000000000000000000000000000000000000000000, CustomError_31aed5c2());
- require(!(arg0 + (arg0)), CustomError_31aed5c2());
- require(bytes1(0x20 + (arg0 + (arg0))) < 0xf800000000000000000000000000000000000000000000000000000000000000, CustomError_31aed5c2());
- require(!(0 < (arg0 + (arg0))), CustomError_31aed5c2());
- require((bytes1(((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09) > 0xff, CustomError_31aed5c2());
- require((0x01 + (bytes1((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09))) > 0xff, CustomError_31aed5c2());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(keccak256(var_e) - blockhash(arg1), CustomError_88dca757());
+ require(!(arg0 + (arg0)), CustomError_88dca757());
+ require(bytes1(0x20 + (arg0 + (arg0))) < 0xc000000000000000000000000000000000000000000000000000000000000000, CustomError_88dca757());
+ require(!(arg0 + (arg0)), CustomError_88dca757());
+ require(bytes1(0x20 + (arg0 + (arg0))) < 0xf800000000000000000000000000000000000000000000000000000000000000, CustomError_88dca757());
+ require(!(0 < (arg0 + (arg0))), CustomError_88dca757());
+ require((bytes1(((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09) > 0xff, CustomError_88dca757());
+ require((0x01 + (bytes1((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09))) > 0xff, CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
- require(0 > (0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))), CustomError_31aed5c2());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(0 > (0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
- require(!(block.chainid == 0xa5bd), CustomError_31aed5c2());
- require(block.chainid == 0xa5bd, CustomError_31aed5c2());
- require(0 < 0x03, CustomError_31aed5c2());
- require(!((0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))) < (arg0 + (arg0))), CustomError_31aed5c2());
- require(!((0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))) < (arg0 + (arg0))), CustomError_31aed5c2());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(!(block.chainid == 0xa5bd), CustomError_b1b7848f());
+ require(block.chainid == 0xa5bd, CustomError_b1b7848f());
+ require(0 < 0x03, CustomError_b1b7848f());
+ require(!((0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))) < (arg0 + (arg0))), CustomError_b1b7848f());
+ require(!((0 + (bytes1(0x01 + ((((0x20 + (arg0 + (arg0))) + 0) >> 0xf8) + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09)))) < (arg0 + (arg0))), CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x32;
- var_a = 0x31aed5c200000000000000000000000000000000000000000000000000000000;
+ var_a = 0x2b31cb5600000000000000000000000000000000000000000000000000000000;
if (0 < 0x08) {
}
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x32;
if (!block.chainid == 0xa5bd) {
if (block.chainid == 0xa5bd) {
- require(!(block.chainid == 0xa5bd), CustomError_c0098bd9());
+ require(!(block.chainid == 0xa5bd), CustomError_b1b7848f());
}
- require(block.chainid == 0xa5bd, CustomError_c0098bd9());
+ require(block.chainid == 0xa5bd, CustomError_b1b7848f());
}
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x32;
var_a = 0xc0098bd900000000000000000000000000000000000000000000000000000000;
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x32;
var_a = 0xff28378700000000000000000000000000000000000000000000000000000000;
var_a = 0xbfc9f0d300000000000000000000000000000000000000000000000000000000;
- require(executionDeadline, CustomError_ded7c80c());
- require(!(!block.timestamp > executionDeadline), CustomError_ded7c80c());
- var_a = 0xded7c80c00000000000000000000000000000000000000000000000000000000;
+ require(unresolved_74cfecc6, CustomError_212837f4());
+ require(!(!block.timestamp > unresolved_74cfecc6), CustomError_212837f4());
+ var_a = 0x212837f400000000000000000000000000000000000000000000000000000000;
var_a = 0xd5ef09ba00000000000000000000000000000000000000000000000000000000;
}
─── Function withdraw (0x3ccfd60b → 0x84a6d62a) ───
@@ -1,40 +1,43 @@
- /// @custom:selector 0x3ccfd60b
- /// @custom:signature withdraw() public payable
- function withdraw() public payable {
+ /// @custom:selector 0x84a6d62a
+ /// @custom:signature Unresolved_84a6d62a(uint256 arg0) public payable
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_84a6d62a(uint256 arg0) public payable {
+ require(0xd6 == msg.data[0]);
+ require(0 == 0x01);
require(msg.value);
require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
- require(!(bytes1(unresolved_308657d7 >> 0x08)), CustomError_618bbdd5());
- require(msg.sender - 0, CustomError_618bbdd5());
- var_a = 0x618bbdd500000000000000000000000000000000000000000000000000000000;
- require(executionDeadline, CustomError_9cbc1de1());
- require(!(block.timestamp > executionDeadline), CustomError_9cbc1de1());
- var_a = 0x9cbc1de100000000000000000000000000000000000000000000000000000000;
- unresolved_1aa7c0ec = uint96(unresolved_1aa7c0ec);
- bondAmount = 0;
- executionDeadline = 0;
- require(unresolved_8bd03d0a > (unresolved_8bd03d0a + unresolved_d415b3f9));
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(!(bytes1(unresolved_4fbdbe0f >> 0x08)), CustomError_4f6b2e1b());
+ require(msg.sender - 0, CustomError_4f6b2e1b());
+ var_a = 0x4f6b2e1b00000000000000000000000000000000000000000000000000000000;
+ require(unresolved_74cfecc6, CustomError_6343e21f());
+ require(!(block.timestamp > unresolved_74cfecc6), CustomError_6343e21f());
+ var_a = 0x6343e21f00000000000000000000000000000000000000000000000000000000;
+ store_k = uint96(store_k);
+ store_o = 0;
+ unresolved_74cfecc6 = 0;
+ require(unresolved_8f4be216 > (unresolved_8f4be216 + unresolved_be90c676), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_b = 0x11;
- unresolved_308657d7 = uint248(unresolved_308657d7);
- unresolved_8bd03d0a = 0;
- currentRewardAmount = 0;
- require(!unresolved_8bd03d0a + unresolved_d415b3f9);
+ unresolved_4fbdbe0f = uint248(unresolved_4fbdbe0f);
+ unresolved_8f4be216 = 0;
+ store_m = 0;
+ require(!unresolved_8f4be216 + unresolved_be90c676);
var_c = 0xa9059cbb00000000000000000000000000000000000000000000000000000000;
address var_d = msg.sender;
- uint256 var_e = unresolved_8bd03d0a + unresolved_d415b3f9;
+ uint256 var_e = unresolved_8f4be216 + unresolved_be90c676;
(bool success, bytes memory ret0) = address(0).Unresolved_a9059cbb(var_d); // call
require(!0, CustomError_045c4b02());
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
- require(0x20 > ret0.length);
- require(((var_f + 0x20) > 0xffffffffffffffff) | ((var_f + 0x20) < var_f));
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(0x20 > ret0.length, CustomError_b1b7848f());
+ require(((var_f + 0x20) > 0xffffffffffffffff) | ((var_f + 0x20) < var_f), CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_b = 0x41;
uint256 var_f = var_f + 0x20;
require(((var_f + 0x20) - var_f) < 0x20);
require(var_f.length - var_f.length, CustomError_045c4b02());
require(!var_f.length, CustomError_045c4b02());
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
var_a = 0x53cd7f7900000000000000000000000000000000000000000000000000000000;
var_a = 0xd5ef09ba00000000000000000000000000000000000000000000000000000000;
}
─── Function resume (0x046f7da2 → 0xf4cb49e1) ───
@@ -1,10 +1,12 @@
- /// @custom:selector 0x046f7da2
- /// @custom:signature resume() public payable
- function resume() public payable {
+ /// @custom:selector 0xf4cb49e1
+ /// @custom:signature Unresolved_f4cb49e1() public payable
+ function Unresolved_f4cb49e1() public payable {
+ require(!store_f);
+ require(0 == 0x01);
require(msg.value);
require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
- require(msg.sender - 0, CustomError_618bbdd5());
- var_a = 0x618bbdd500000000000000000000000000000000000000000000000000000000;
- unresolved_308657d7 = uint248(unresolved_308657d7);
+ require(msg.sender - 0, CustomError_4f6b2e1b());
+ var_a = 0x4f6b2e1b00000000000000000000000000000000000000000000000000000000;
+ unresolved_4fbdbe0f = uint248(unresolved_4fbdbe0f);
}
─── Function bond (0x9940686e → 0x9f0f6825) ───
@@ -1,54 +1,56 @@
- /// @custom:selector 0x9940686e
- /// @custom:signature bond(uint256 arg0) public payable
+ /// @custom:selector 0x9f0f6825
+ /// @custom:signature Unresolved_9f0f6825(uint256 arg0) public payable
/// @param arg0 ["uint256", "bytes32", "int256"]
- function bond(uint256 arg0) public payable {
+ function Unresolved_9f0f6825(uint256 arg0) public payable {
+ require(0x68 == msg.data[0]);
+ require(0 == 0x01);
require(msg.value);
require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0x20, CustomError_253ef1d2());
- require(executionDeadline, CustomError_253ef1d2());
- require(block.timestamp > executionDeadline, CustomError_253ef1d2());
- require(!(bytes1(unresolved_308657d7 >> 0x08)), CustomError_253ef1d2());
- require(bytes1(unresolved_308657d7), CustomError_253ef1d2());
- require(executionDeadline, CustomError_253ef1d2());
- require(!(block.timestamp > executionDeadline), CustomError_253ef1d2());
+ require(unresolved_74cfecc6, CustomError_253ef1d2());
+ require(block.timestamp > unresolved_74cfecc6, CustomError_253ef1d2());
+ require(!(bytes1(unresolved_4fbdbe0f >> 0x08)), CustomError_253ef1d2());
+ require(bytes1(unresolved_4fbdbe0f), CustomError_253ef1d2());
+ require(unresolved_74cfecc6, CustomError_253ef1d2());
+ require(!(block.timestamp > unresolved_74cfecc6), CustomError_253ef1d2());
var_a = 0x253ef1d200000000000000000000000000000000000000000000000000000000;
- require((currentRewardAmount >> 0x01) > arg0, CustomError_e92c469f());
+ require((store_m >> 0x01) > arg0, CustomError_e92c469f());
var_a = 0xe92c469f00000000000000000000000000000000000000000000000000000000;
var_b = 0x23b872dd00000000000000000000000000000000000000000000000000000000;
address var_c = msg.sender;
address var_d = address(this);
uint256 var_e = arg0;
(bool success, bytes memory ret0) = address(0).Unresolved_23b872dd(var_c); // call
- require(!0, CustomError_045c4b02());
- unresolved_1aa7c0ec = (uint96(unresolved_1aa7c0ec)) | msg.sender;
- require(block.timestamp > (block.timestamp + 0x012c), CustomError_045c4b02());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(!0, CustomError_88dca757());
+ store_k = (uint96(store_k)) | msg.sender;
+ require(block.timestamp > (block.timestamp + 0x012c), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_f = 0x11;
- executionDeadline = block.timestamp + 0x012c;
- bondAmount = arg0;
+ unresolved_74cfecc6 = block.timestamp + 0x012c;
+ store_o = arg0;
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
- require(0x20 > ret0.length);
- require(((var_g + 0x20) > 0xffffffffffffffff) | ((var_g + 0x20) < var_g));
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(0x20 > ret0.length, CustomError_b1b7848f());
+ require(((var_g + 0x20) > 0xffffffffffffffff) | ((var_g + 0x20) < var_g), CustomError_b1b7848f());
+ var_a = 0xb1b7848f00000000000000000000000000000000000000000000000000000000;
var_f = 0x41;
uint256 var_g = var_g + 0x20;
require(((var_g + 0x20) - var_g) < 0x20);
require(var_g.length - var_g.length, CustomError_045c4b02());
require(!var_g.length, CustomError_045c4b02());
var_a = 0x045c4b0200000000000000000000000000000000000000000000000000000000;
var_a = 0x2479328900000000000000000000000000000000000000000000000000000000;
var_a = 0xd5ef09ba00000000000000000000000000000000000000000000000000000000;
- require(currentRewardAmount > (currentRewardAmount + bondAmount), CustomError_9cbc1de1());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ require(store_m > (store_m + store_o), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_f = 0x11;
- currentRewardAmount = currentRewardAmount + bondAmount;
- require(totalBondsDeposited > (totalBondsDeposited + bondAmount), CustomError_9cbc1de1());
- var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
+ store_m = store_m + store_o;
+ require(store_j > (store_j + store_o), CustomError_88dca757());
+ var_a = 0x88dca75700000000000000000000000000000000000000000000000000000000;
var_f = 0x11;
- totalBondsDeposited = totalBondsDeposited + bondAmount;
- require(executionDeadline, CustomError_9cbc1de1());
- require(!(block.timestamp > executionDeadline), CustomError_9cbc1de1());
- var_a = 0x9cbc1de100000000000000000000000000000000000000000000000000000000;
- if (executionDeadline) {
+ store_j = store_j + store_o;
+ require(unresolved_74cfecc6, CustomError_6343e21f());
+ require(!(block.timestamp > unresolved_74cfecc6), CustomError_6343e21f());
+ var_a = 0x6343e21f00000000000000000000000000000000000000000000000000000000;
+ if (unresolved_74cfecc6) {
}
}
─── Added: Unresolved_cbd22e1d (0xcbd22e1d) ───
@@ -1,0 +1,16 @@
+
+ /// @custom:selector 0xcbd22e1d
+ /// @custom:signature Unresolved_cbd22e1d(uint256 arg0) public view returns (bool)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_cbd22e1d(uint256 arg0) public view returns (bool) {
+ require(0xcb == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ if (unresolved_74cfecc6) {
+ uint256 var_a = !(block.timestamp > unresolved_74cfecc6);
+ return !(block.timestamp > unresolved_74cfecc6);
+ var_a = unresolved_74cfecc6;
+ return unresolved_74cfecc6;
+ }
+ }
─── Added: Unresolved_d495237b (0xd495237b) ───
@@ -1,0 +1,12 @@
+
+ /// @custom:selector 0xd495237b
+ /// @custom:signature Unresolved_d495237b(uint256 arg0) public view returns (uint256)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_d495237b(uint256 arg0) public view returns (uint256) {
+ require(0x23 == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ var_a = store_o;
+ return store_o;
+ }
─── Added: Unresolved_d860c08c (0xd860c08c) ───
@@ -1,0 +1,12 @@
+
+ /// @custom:selector 0xd860c08c
+ /// @custom:signature Unresolved_d860c08c(uint256 arg0) public view returns (address)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_d860c08c(uint256 arg0) public view returns (address) {
+ require(0xc0 == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ address var_a = address(store_k);
+ return address(store_k);
+ }
─── Added: Unresolved_307d1fb7 (0x307d1fb7) ───
@@ -1,0 +1,18 @@
+
+ /// @custom:selector 0x307d1fb7
+ /// @custom:signature Unresolved_307d1fb7(uint256 arg0) public view returns (uint256)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_307d1fb7(uint256 arg0) public view returns (uint256) {
+ require(0x30 == msg.data[0]);
+ require(0 == 0x01);
+ require(!store_h);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ var_a = unresolved_8f4be216;
+ return unresolved_8f4be216;
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ bytes1 var_a = !(!bytes1(unresolved_4fbdbe0f));
+ return !(!bytes1(unresolved_4fbdbe0f));
+ }
─── Added: Unresolved_55161992 (0x55161992) ───
@@ -1,0 +1,12 @@
+
+ /// @custom:selector 0x55161992
+ /// @custom:signature Unresolved_55161992(uint256 arg0) public pure returns (uint256)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_55161992(uint256 arg0) public pure returns (uint256) {
+ require(0x55 == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ uint256 var_a = 0;
+ return 0;
+ }
─── Added: Unresolved_20d12566 (0x20d12566) ───
@@ -1,0 +1,11 @@
+
+ /// @custom:selector 0x20d12566
+ /// @custom:signature Unresolved_20d12566() public view returns (uint256)
+ function Unresolved_20d12566() public view returns (uint256) {
+ require(!store_g);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ var_a = 0x0100;
+ return 0x0100;
+ }
─── Added: Unresolved_86457ec8 (0x86457ec8) ───
@@ -1,0 +1,12 @@
+
+ /// @custom:selector 0x86457ec8
+ /// @custom:signature Unresolved_86457ec8(uint256 arg0) public pure returns (uint256)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_86457ec8(uint256 arg0) public pure returns (uint256) {
+ require(0x86 == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ uint256 var_a = 0;
+ return 0;
+ }
─── Added: Unresolved_fe69394d (0xfe69394d) ───
@@ -1,0 +1,12 @@
+
+ /// @custom:selector 0xfe69394d
+ /// @custom:signature Unresolved_fe69394d(uint256 arg0) public view returns (uint256)
+ /// @param arg0 ["uint256", "bytes32", "int256"]
+ function Unresolved_fe69394d(uint256 arg0) public view returns (uint256) {
+ require(0xfe == msg.data[0]);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ var_a = store_j;
+ return store_j;
+ }
─── Added: Unresolved_c94e8077 (0xc94e8077) ───
@@ -1,0 +1,10 @@
+ /// @custom:selector 0xc94e8077
+ /// @custom:signature Unresolved_c94e8077() public view returns (uint256)
+ function Unresolved_c94e8077() public view returns (uint256) {
+ require(!store_e);
+ require(0 == 0x01);
+ require(msg.value);
+ require((0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + msg.data.length) < 0);
+ uint256 var_a = 0;
+ return 0;
+ }
Commit 1f3afd3 |
g4titanx
approved these changes
Jun 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
collect()revert withWrongEventSignature()(0x49b4a8ba) on the ERC20 Transfer topic, reproduced under mainnet seedb1314f5c....PUSH16+that was >=60% printable ASCII, with no check that the block was actually anError(string)construction.0x7e9d3b86..., 69% printable) was misclassified and XOR-scrambled, so the chain reduced to the wrong topic andcollect()reverted.Error(string)selector, preserving its original purpose (catching error-string blocks split by other transforms) while refusing to touch unrelated constants.Details
bisect_failing_seed_transform_subsetstest documents the full subset matrix.arithmetic_chain_evm.rs) compiles AC chains and executes them on REVM, confirming the chain math (including MUL/DIV, an early suspect) is bit-exact against EVM semantics over 65 targets including the real Transfer topic.cargo fmt,cargo clippy --all-targets, and the full suite (189 passed) are green.